//: innerclasses/TestParcel.java
package innerclasses;

class Parcel4 {
  /**
   * 私有内部类
   */
  private class PContents implements Contents {
    private int i = 11;
    public int value() { return i; }
  }

  /**
   * protected内部类，但构造器私有化
   */
  protected class PDestination implements Destination {
    private String label;
    private PDestination(String whereTo) {
      label = whereTo;
    }
    public String readLabel() { return label; }
  }
  //对外提供内部类对象
  public Destination destination(String s) {
    return new PDestination(s);
  }
  public Contents contents() {
    return new PContents();
  }
}

public class TestParcel {
  public static void main(String[] args) {
    Parcel4 p = new Parcel4();
    //使用接口作为引用，外部类方法提供对象，而内部类实现甚至类名完全被隐藏
    Contents c = p.contents();
    Destination d = p.destination("Tasmania");
    // Illegal -- can't access private class:不能访问私有类
    //! Parcel4.PContents pc = p.new PContents();
//    p.new PDestination();  私有构造器，不可访问
//    Parcel4.PDestination p1 = p.destination("233"); 甚至不能引用内部类类型
  }
} ///:~
